/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */
package org.dspace.app.mediafilter;

import org.dspace.content.Bitstream;
import org.dspace.content.Item;
import org.dspace.core.Context;


/**
 * Abstract class which defines the default settings for a *simple* Media or Format Filter.
 * This class may be extended by any class which wishes to define a simple filter to be run
 * by the MediaFilterManager.  More complex filters should likely implement the FormatFilter
 * interface directly, so that they can define their own pre/postProcessing methods.
 */
public abstract class MediaFilter implements FormatFilter {
    /**
     * Perform any pre-processing of the source bitstream *before* the actual
     * filtering takes place in MediaFilterManager.processBitstream().
     * <p>
     * Return true if pre-processing is successful (or no pre-processing
     * is necessary).  Return false if bitstream should be skipped
     * for any reason.
     *
     * @param c       context
     * @param item    item containing bitstream to process
     * @param source  source bitstream to be processed
     * @param verbose verbose mode
     * @return true if bitstream processing should continue,
     * false if this bitstream should be skipped
     * @throws Exception if error
     */
    @Override
    public boolean preProcessBitstream(Context c, Item item, Bitstream source, boolean verbose)
        throws Exception {
        return true;  //default to no pre-processing
    }

    /**
     * Perform any post-processing of the generated bitstream *after* this
     * filter has already been run.
     * <p>
     * Return true if pre-processing is successful (or no pre-processing
     * is necessary).  Return false if bitstream should be skipped
     * for some reason.
     *
     * @param c                  context
     * @param item               item containing bitstream to process
     * @param generatedBitstream the bitstream which was generated by
     *                           this filter.
     * @throws Exception if error
     */
    @Override
    public void postProcessBitstream(Context c, Item item, Bitstream generatedBitstream)
        throws Exception {
        //default to no post-processing necessary
    }
}
